package com.cr.manager.service.impl;

import java.util.List;

import com.cr.common.constant.CommonConstant;
import com.cr.common.utils.DateUtils;
import com.cr.common.utils.pwd.OConvertUtils;
import com.cr.manager.domain.Car;
import com.cr.manager.domain.UserRent;
import com.cr.manager.domain.dto.RentDto;
import com.cr.manager.mapper.CarMapper;
import com.cr.manager.mapper.RentMapper;
import com.cr.manager.mapper.UserRentMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.cr.manager.mapper.UserMapper;
import com.cr.manager.domain.User;
import com.cr.manager.service.IUserService;

/**
 * 用户管理Service业务层处理
 * 
 * @author ruoyi
 * @date 2024-08-07
 */
@Service
public class UserServiceImpl implements IUserService 
{
    @Autowired
    private UserMapper userMapper;
    @Autowired
    private CarMapper carMapper;
    @Autowired
    private RentMapper rentMapper;
    @Autowired
    private UserRentMapper userRentMapper;

    /**
     * 查询用户管理
     * 
     * @param id 用户管理主键
     * @return 用户管理
     */
    @Override
    public User selectUserById(String id)
    {
        return userMapper.selectUserById(id);
    }

    /**
     * 查询用户管理列表
     * 
     * @param user 用户管理
     * @return 用户管理
     */
    @Override
    public List<User> selectUserList(User user)
    {
        return userMapper.selectUserList(user);
    }

    /**
     * 新增用户管理
     * 
     * @param user 用户管理
     * @return 结果
     */
    @Override
    public int insertUser(User user)
    {
        String salt = OConvertUtils.randomGen(8);
        user.setSalt(salt);
        // 没有密码则设置默认密码为123456
        if(user.getPassword() == null) user.setPassword("123456");
        user.setCreateTime(DateUtils.getNowDate());
        user.setSex("1");
        return userMapper.insertUser(user);
    }

    /**
     * 修改用户管理
     * 
     * @param user 用户管理
     * @return 结果
     */
    @Override
    public int updateUser(User user)
    {
        // 修改密码（用户名可能有修改）
        String salt = OConvertUtils.randomGen(8);
        user.setSalt(salt);
        user.setUpdateTime(DateUtils.getNowDate());
        if(user.getSex().equals("男")) user.setSex("1");
        else if(user.getSex().equals("女")) user.setSex("0");
        return userMapper.updateUser(user);
    }

    /**
     * 批量删除用户管理
     * 
     * @param ids 需要删除的用户管理主键
     * @return 结果
     */
//    @Override
//    public int deleteUserByIds(String[] ids)
//    {
//        return userMapper.deleteUserByIds(ids);
//    }

    /**
     * 删除用户管理信息
     * 
     * @param id 用户管理主键
     * @return 结果
     */
    @Override
    public int deleteUserById(String id)
    {
        // 1、判断是否有车辆（作为联系人）
        Car car = new Car();
        car.setUserId(Integer.valueOf(id));
        if(carMapper.selectCarList(car).size() > 0) throw new RuntimeException("该用户有车辆，不能删除");
        // 2、获取用户租借信息（作为出租人）
        UserRent userRent = userRentMapper.selectUserRentByUserId(id);
        // 3、修改车辆租借状态
        if(userRent != null) {
            RentDto rentDto = rentMapper.selectRentById(String.valueOf(userRent.getRentId()));
            car = carMapper.selectCarById(rentDto.getCarId());
            car.setIsRent(CommonConstant.NOT_REND);
            carMapper.updateCar(car);
        }
        // 4、删除用户租借信息
        userRentMapper.deleteUserRentByUserId(id);
        // 5、删除租借信息
        if(userRent!=null && userRent.getUserId() != null) rentMapper.deleteRentById(String.valueOf(userRent.getRentId()));
        // 6、删除用户
        return userMapper.deleteUserById(id);
    }
}
